<?php

namespace App\Http\Controllers\OperationManagement;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\OperationManagement\TreatmentPlant;
use Illuminate\Database\QueryException;
use App\Http\Requests\OperationManagement\TreatmentPlantRequest;
use Grimzy\LaravelMysqlSpatial\Types\Point;

/**
 * @group 环卫部件导入->环卫作业图->处理厂
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */

class TreatmentPlantController extends Controller
{
    /**
     * 处理厂信息查看列表
     *
     * @bodyParam name string 名称
     * @bodyParam address string 地址
     *
     * @queryParam name string 名称
     * @queryParam address string 地址
     * @queryParam location string 经纬度-点 115.24556 25.14551
     * @queryParam phone string 热线电话
     * @queryParam principal string 联系人
     * @queryParam number int 日处理量
     * @queryParam servicing_time datetime 服务时间
     * @queryParam end_time datetime 停运时间
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $transferPlant = new TransferPlant;
        $data = $transferPlant->getList($request);
        return response()->json(encodeMsg($data,200));
    }

    /**
     * 新增处理厂信息
     *
     * @bodyParam name string 名称
     * @bodyParam address string 地址
     * @bodyParam location string 经纬度-点 115.24556 25.14551
     * @bodyParam phone string 热线电话
     * @bodyParam principal string 联系人
     * @bodyParam number int 日处理量
     * @bodyParam servicing_time datetime 服务时间
     * @bodyParam end_time datetime 停运时间bodyParam
     *
     * @queryParam name string 名称
     * @queryParam address string 地址
     * @queryParam location string 经纬度-点 115.24556 25.14551
     * @queryParam phone string 热线电话
     * @queryParam principal string 联系人
     * @queryParam number int 日处理量
     * @queryParam servicing_time datetime 服务时间
     * @queryParam end_time datetime 停运时间
     *
     * @return \Illuminate\Http\Response
     */
    public function store(TreatmentPlantRequest $request)
    {
        try {
            $data = $request->all();
            $location = $request->input('location','');
            if(!empty($location)){
                $data['location'] = Point::fromString($location);
            }
            $transferPlant = TransferPlant::create($data);
            return response()->json(encodeMsg($transferPlant,201));
        } catch (QueryException $e) {
            // dd($e);
            return response()->json(encodeMsg(['message' => '处理厂信息添加失败!'],400));
        }
    }

    /**
     * 查看处理厂信息
     *
     * @bodyParam id int 处理厂id
     *
     * @queryParam name string 名称
     * @queryParam address string 地址
     * @queryParam location string 经纬度-点 115.24556 25.14551
     * @queryParam phone string 热线电话
     * @queryParam principal string 联系人
     * @queryParam number int 日处理量
     * @queryParam servicing_time datetime 服务时间
     * @queryParam end_time datetime 停运时间
     *
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $data = TransferPlant::find($id);
        if($data == []) {
            return response()->json(encodeMsg(["message" => "没有该处理厂信息!"], 404));
        } else {
            return response()->json(encodeMsg($data,200));
        }
    }

    /**
     * 修改处理厂信息
     *
     * @bodyParam id int 处理厂id
     * @bodyParam name string 名称
     * @bodyParam address string 地址
     * @bodyParam location string 经纬度-点 115.24556 25.14551
     * @bodyParam phone string 热线电话
     * @bodyParam principal string 联系人
     * @bodyParam number int 日处理量
     * @bodyParam servicing_time datetime 服务时间
     * @bodyParam end_time datetime 停运时间bodyParam
     *
     * @queryParam name string 名称
     * @queryParam address string 地址
     * @queryParam location string 经纬度-点 115.24556 25.14551
     * @queryParam phone string 热线电话
     * @queryParam principal string 联系人
     * @queryParam number int 日处理量
     * @queryParam servicing_time datetime 服务时间
     * @queryParam end_time datetime 停运时间
     *
     * @return \Illuminate\Http\Response
     */
    public function update(TreatmentPlantRequest $request, $id)
    {
        $transferPlant = TransferPlant::find($id);
        if($transferPlant == []) {
            return response()->json(encodeMsg(["message" => "没有该处理厂信息!"], 404));
        }
        try {
            $data = $request->all();
            $location = $request->input('location','');
            if(!empty($location)){
                $data['location'] = Point::fromString($location);
            }
            $transferPlant->update($data);
            return response()->json(encodeMsg($transferPlant,200));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '处理厂信息修改失败!'],400));
        }
    }

    /**
     * 删除处理厂信息
     *
     *
     * @bodyParam id int required 处理厂ID
     * @response 204 {
     *   "message": "处理厂信息删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该处理厂信息"
     * }
     *
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $transferPlant = TransferPlant::find($id);
        if($transferPlant == []) {
            return response()->json(encodeMsg(["message" => "没有该处理厂信息!"], 404));
        }
        if($transferPlant->delete()) {
            return response()->json(encodeMsg(["message" => "处理厂信息删除成功!"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "处理厂信息删除失败"], 400));
        }
    }

    /**
     * 批量删除中转站信息
     *
     * @bodyParam ids int required id集合字符串[格式：ids=1,2,3]
     * @response 204 {
     *   "message": "处理厂信息删除成功"
     * }
     *
     *
     */
    public function delete($ids)
    {
        $listId = explode(',', $ids);
        TransferPlant::whereIn('id',$listId)->delete();
        return response()->json(encodeMsg(["message" => "处理厂信息删除成功!"], 204));
    }
}
